﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PHI2
{
    static class CalculosLaboratorio
    {
        /// <summary>
        /// Método que retorna la Biomasa de grano
        /// </summary>
        /// <param name="DS"></param>
        /// <param name="FS"></param>
        /// <param name="FB"></param>
        /// <param name="HA"></param>
        /// <returns></returns>
        static public float Biomasa(float DS,float FS,float FB,float HA)
        {
            return (((DS/FS)*(FB+FS))*(10/HA));
        }

        /// <summary>
        /// Método que retorna el rendimiento por grano
        /// </summary>
        /// <param name="DG"></param>
        /// <param name="WG"></param>
        /// <param name="TG"></param>
        /// <param name="FS"></param>
        /// <param name="FB"></param>
        /// <param name="HA"></param>
        /// <returns></returns>
        static public float Rendimiento(float DG,float WG, float TG, float FS, float FB, float HA)
        {
            return (((DG*TG/WG) * ((FS+FB)/FB)) * (10 / HA));
        }

        /// <summary>
        /// Método que retorna el indice de cosecha
        /// </summary>
        /// <param name="Biomasa"></param>
        /// <param name="Rendimiento"></param>
        /// <returns></returns>
        static public float IC(float Biomasa, float Rendimiento)
        {
            return (Rendimiento/Biomasa);
        }

        /// <summary>
        /// Método que retorna el peso seco de 1000 granos
        /// </summary>
        /// <param name="DG"></param>
        /// <returns></returns>
        static public float P1000(float DG)
        {
            return (4*DG);
        }

        /// <summary>
        /// Método que retorna los granos por metro cuadrado
        /// </summary>
        /// <param name="Rendimiento"></param>
        /// <param name="P1000"></param>
        /// <returns></returns>
        static public float GRM2(float Rendimiento,float P1000)
        {
            return (Rendimiento*100/P1000);
        }

        /// <summary>
        /// Metodo que retorna las espigas por metro cuadrado
        /// </summary>
        /// <param name="FS"></param>
        /// <param name="FB"></param>
        /// <param name="HA"></param>
        /// <returns></returns>
        static public float ESPM2(float FS, float FB, float HA)
        {
            return (((FB+FS)/FS)*(50/HA));
        }
        /// <summary>
        /// Método que retorna los granos por espiga
        /// </summary>
        /// <param name="GR"></param>
        /// <param name="ESP"></param>
        /// <returns></returns>
        static public float GRESP(float GR, float ESP)
        {
            return (GR/ESP);
        }

        /// <summary>
        /// Método que retorna la tasa de produccion de grano
        /// </summary>
        /// <param name="Rendimiento"></param>
        /// <param name="DM"></param>
        /// <param name="DA"></param>
        /// <returns></returns>
        static public float TPG(float Rendimiento, int DM,int DA)
        {
            if (DM == DA) return 0;
            return (Rendimiento/(DM-DA));
        }
        /// <summary>
        /// Método que retorna la tasa de produccion de biomasa
        /// </summary>
        /// <param name="Biomasa"></param>
        /// <param name="DM"></param>
        /// <param name="DE"></param>
        /// <returns></returns>
        static public float TPB(float Biomasa, int DM, int DE)
        {
            if (DM == DE) return 0;
            return (Biomasa/(DM-DE));
        }

        /// <summary>
        /// Método que realiza todos los calculos
        /// </summary>
        /// <param name="mediciones"></param>
        /// <returns></returns>
        static public float[] Calculos(Mediciones mediciones)
        {
            float[] calculos = new float[11];
            calculos[0]=Biomasa(Convert.ToSingle(mediciones.DS),Convert.ToSingle(mediciones.FS),Convert.ToSingle(mediciones.FB),Convert.ToSingle(mediciones.HA));
            calculos[1]=Rendimiento(Convert.ToSingle(mediciones.DG),Convert.ToSingle(mediciones.WG),Convert.ToSingle(mediciones.TG),Convert.ToSingle(mediciones.FS),Convert.ToSingle(mediciones.FB),Convert.ToSingle(mediciones.HA));
            calculos[2] = IC(calculos[0], calculos[1]);
            calculos[3] = P1000(Convert.ToSingle(mediciones.DG));
            calculos[4] = GRM2(calculos[1], calculos[3]);
            calculos[5] = ESPM2(Convert.ToSingle(mediciones.FS), Convert.ToSingle(mediciones.FB), Convert.ToSingle(mediciones.HA));
            calculos[6] = GRESP(calculos[4], calculos[5]);
            DateTime f1=(DateTime)mediciones.FechaSiembra;
            DateTime f2=(DateTime)mediciones.FechaMadurez;
            DateTime f3=(DateTime)mediciones.FechaFloracion;
            DateTime f4=(DateTime)mediciones.FechaEmergencia;
            calculos[7] = Convert.ToSingle((f3 - f1).Days);
            calculos[8] = Convert.ToSingle((f2 - f1).Days);
            calculos[9] = TPG(calculos[1], (f2 - f1).Days, (f3 - f1).Days);
            calculos[10] = TPB(calculos[0], (f2 - f1).Days, (f4 - f1).Days);
            return calculos;
        }


    }
}
